//
//  MDHViewController.h
//  MDHPT
//
//  Created by 高得华 on 2019/4/27.
//  Copyright © 2019年 高得华. All rights reserved.
//  所有自定义视图控制器的基类

#import <UIKit/UIKit.h>
#import "MDHViewModel.h"
#import "JXPagerView.h"
#if __has_include(<DZNEmptyDataSet/UIScrollView+EmptyDataSet.h>)
#import <DZNEmptyDataSet/UIScrollView+EmptyDataSet.h>
#else
#import "UIScrollView+EmptyDataSet.h"
#endif

NS_ASSUME_NONNULL_BEGIN

@interface MDHViewController : UIViewController
<
JXPagerViewListViewDelegate,
JXPagerViewDelegate,
DZNEmptyDataSetSource,
DZNEmptyDataSetDelegate
>

/// The `viewModel` parameter in `-initWithViewModel:` method.
@property (nonatomic, readonly, strong) MDHViewModel *viewModel;

/// 截图（Push/Pop Present/Dismiss 过度过程中的缩略图）
@property (nonatomic, readwrite, strong) UIView *snapshot;
/**
 统一使用该方法初始化，子类中直接声明对于的'readonly' 的 'viewModel'属性，
 并在@implementation内部加上关键词 '@dynamic viewModel;'
 @dynamic A相当于告诉编译器：“参数A的getter和setter方法并不在此处，
 而在其他地方实现了或者生成了，当你程序运行的时候你就知道了，
 所以别警告我了”这样程序在运行的时候，
 对应参数的getter和setter方法就会在其他地方去寻找，比如父类。
 */
/// Initialization method. This is the preferred way to create a new view.
///
/// viewModel - corresponding view model
///
/// Returns a new view.
- (instancetype)initWithViewModel:(MDHViewModel *)viewModel;

/// Binds the corresponding view model to the view.(绑定数据模型)
- (void)bindViewModel;

@end

NS_ASSUME_NONNULL_END
